package avicit.bdp.dgs.metadata.dao;

import avicit.bdp.common.base.BaseDAO;
import avicit.bdp.common.service.dto.BdpTableDTO;
import com.github.pagehelper.Page;
import java.util.List;
import org.apache.ibatis.annotations.Param;

/**
 * 数据表元数据存储DAO
 *
 * @author mayanj
 */
public interface MetadataTableDao extends BaseDAO<BdpTableDTO> {
  /**
   * 查询模型列表
   *
   * @param datasourceType 数据源类型
   * @param dataSourceId 数据源ID
   * @param type 类型：0--全域建模；1--数据开发平台项目建模；2--数据字典;3--元数据；4--逻辑模型; 5--物理模型
   * @param typeIdList 分类ID集合
   * @param keyWords 关键词
   * @param status 状态
   * @param fromBaseVersion 是否基于基线版本
   * @return 表数据
   */
  Page<BdpTableDTO> queryTablePageList(
      @Param("datasourceType") String datasourceType,
      @Param("dataSourceId") String dataSourceId,
      @Param("type") Integer type,
      @Param("typeIdList") List<String> typeIdList,
      @Param("keyWords") String keyWords,
      @Param("status") Integer status,
      @Param("fromBaseVersion") Integer fromBaseVersion,
      @Param("wordSecretList") List<String> wordSecretList);

  /**
   * 查询列表
   *
   * @param dataSourceId 数据源ID
   * @return 列表数据
   */
  List<BdpTableDTO> queryTableList(
      @Param("dataSourceId") String dataSourceId,
      @Param("type") int type,
      @Param("idList") List<String> idList);

  /**
   * 根据type id 统计导入的模型数
   *
   * @param typeId 分类ID
   * @return 模型数
   */
  int countTableByTypeId(@Param("typeId") String typeId);

  /**
   * 批量更新数据目录ID
   *
   * @param catalogId 据目录ID
   * @param dataAssetIdList 元数据资产ID
   */
  void batchUpdateCatalogId(
      @Param("catalogId") String catalogId, @Param("dataAssetIdList") List<String> dataAssetIdList);

  int batchUpdateStatus(@Param("ids") List<String> ids, @Param("status") int status);

  int batchUpdate(@Param("list") List<BdpTableDTO> updateList);

  BdpTableDTO selectById(@Param("id") String id);

  String getMetadataDataHierarchy(@Param("dataHierarchyId") String dataHierarchyId);

  String getMetadataDomain(@Param("domainId") String domainId);

  int deleteByDatasourceId(@Param("datasourceId") String datasourceId);
}
